package com.honghe.system.service.impl;

import java.util.List;
import com.honghe.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.honghe.system.mapper.ContractInfoMapper;
import com.honghe.system.domain.ContractInfo;
import com.honghe.system.service.IContractInfoService;

/**
 * 合同信息Service业务层处理
 * 
 * @author honghe
 * @date 2025-05-09
 */
@Service
public class ContractInfoServiceImpl implements IContractInfoService 
{
    @Autowired
    private ContractInfoMapper contractInfoMapper;

    /**
     * 查询合同信息
     * 
     * @param contractId 合同信息主键
     * @return 合同信息
     */
    @Override
    public ContractInfo selectContractInfoByContractId(String contractId)
    {
        return contractInfoMapper.selectContractInfoByContractId(contractId);
    }

    /**
     * 查询合同信息列表
     * 
     * @param contractInfo 合同信息
     * @return 合同信息
     */
    @Override
    public List<ContractInfo> selectContractInfoList(ContractInfo contractInfo)
    {
        return contractInfoMapper.selectContractInfoList(contractInfo);
    }

    /**
     * 新增合同信息
     * 
     * @param contractInfo 合同信息
     * @return 结果
     */
    @Override
    public int insertContractInfo(ContractInfo contractInfo)
    {
        contractInfo.setCreateTime(DateUtils.getNowDate());
        
        // 生成合同编号：HT+年月日+序号
        String contractId = generateContractId();
        contractInfo.setContractId(contractId);
        
        return contractInfoMapper.insertContractInfo(contractInfo);
    }

    /**
     * 生成合同编号：HT+年月日+序号
     * 格式：HT20250519+01，其中01是当天的第1个合同，依次递增
     * 
     * @return 生成的合同编号
     */
    private String generateContractId() {
        // 获取当前日期字符串，格式YYYYMMDD
        String dateStr = DateUtils.dateTimeNow("yyyyMMdd");
        
        // 生成前缀：HT + 年月日
        String prefix = "HT" + dateStr;
        
        // 查询当天最大序号
        int maxSeq = contractInfoMapper.getMaxSeqByPrefix(prefix);
        
        // 序号+1，格式化为2位数字（01-99）
        String seq = String.format("%02d", maxSeq + 1);
        
        // 返回完整的合同编号
        return prefix + seq;
    }

    /**
     * 修改合同信息
     * 
     * @param contractInfo 合同信息
     * @return 结果
     */
    @Override
    public int updateContractInfo(ContractInfo contractInfo)
    {
        contractInfo.setUpdateTime(DateUtils.getNowDate());
        
        // 如果fileInfo为空字符串，设置为null以确保数据库中的值被清除
        if (contractInfo.getFileInfo() != null && contractInfo.getFileInfo().trim().isEmpty()) {
            contractInfo.setFileInfo(null);
        }
        
        return contractInfoMapper.updateContractInfo(contractInfo);
    }

    /**
     * 批量删除合同信息
     * 
     * @param contractIds 需要删除的合同信息主键
     * @return 结果
     */
    @Override
    public int deleteContractInfoByContractIds(String[] contractIds)
    {
        return contractInfoMapper.deleteContractInfoByContractIds(contractIds);
    }

    /**
     * 删除合同信息信息
     * 
     * @param contractId 合同信息主键
     * @return 结果
     */
    @Override
    public int deleteContractInfoByContractId(String contractId)
    {
        return contractInfoMapper.deleteContractInfoByContractId(contractId);
    }
}
